from openai import OpenAI
from globle import configs as cfg
client = OpenAI(api_key=cfg.DEEPSEEK_API_KEY, base_url="https://api.deepseek.com")
import json
import pandas as pd
from tqdm import tqdm
tqdm.pandas()
'''
需求：用几个例子添加进prompt，重新判断一下情感分类
改动步骤:
1. 加载示例数据
2. 把示例数据组合成字符串输出
3. 根据示例字符串拼接成prompt
'''
def load_examples():
    # 1. 加载示例数据
    df = pd.read_csv('few_shot_examples.csv')
    example_str = ''
    # 2. 把示例数据组合成字符串输出
    for label, text in zip(df['label'], df['text']):
        example_str += f"text: {text} -> label: {label}\n"
    return example_str



def classification(text):
    system_prompt = f'''
        你是一个情感分类的助手，请判断我的评论情感上属于正面评论还是负面评论,可参考示例：
        {example_str}
        
        以json返回，字段：
        - label: 1是正面评论 0是负面评论
    '''

    completion = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role":"system","content":system_prompt},
            {"role":"user","content":text}
        ],
        response_format={"type":'json_object'}, # 以json返回
        temperature=0.5, # 随机性,文本分类这种严谨性任务，随机性调低。如果需要创意类生成性需求，调高。
        max_tokens=12
    )
    json_str = completion.choices[0].message.content
    r = json.loads(json_str)
    return r['label']

example_str = load_examples()
# 2. 加载数据
df = pd.read_csv('test.csv')
# 3. 遍历数据调用LLM分类
df['pred_label']=df['text'].progress_apply(classification)
# 4. 计算准确率
acc = (df['label']==df['pred_label']).mean()
print(f"准确率: {acc:.3f}")
# 5. 保存新数据
df.to_csv('test_pred.csv', index=False)
